package com.pro.service.imple;

import com.pro.mapper.JsMenuDeptMapper;
import com.pro.pojo.JsMenu;
import com.pro.pojo.JsonData;
import com.pro.service.JsMenuDeptService;
import com.pro.utils.RedisCatch;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @Author 祖铭泽
 * @Date 2022/1/7/0007
 * @description 部门和导航栏 中间表 service层 实现类
 */
@Service
public class JsMenuDeptServiceImple implements JsMenuDeptService {

    @Autowired
    private JsMenuDeptMapper jsMenuDeptMapper;

    @Autowired
    private RedisCatch redisCatch;
    /**
     * @Author 祖铭泽
     * @Date 2022/1/7/0007
     * @description 获取对应部门的导航栏
     */
    @Override
    public JsonData getJsMenuDeptByUserId(Integer userId) {
        //根据userid去查看对应的部门标识
        List<String> jsMenuDeptIdenByUserId = jsMenuDeptMapper.getJsMenuDeptIdenByUserId(userId);
        String deptIden="";
        //把部门标识存在一个String中作为key
        for (String s : jsMenuDeptIdenByUserId) {
            deptIden+=s;
        }
        //判断redis中是否存在这个key
        if(redisCatch.getCacheList(deptIden)==null||redisCatch.getCacheList(deptIden).isEmpty()){
            //如果key不存在
            //根据userid去查看对应的到导航栏
            List<JsMenu> jsMenuDeptByUserId = setMenus(userId);
            //把用户对应的导航栏存入redis
            redisCatch.setCacheList(deptIden,jsMenuDeptByUserId);
            return jsMenuDeptByUserId != null ? JsonData.buildSuccess(jsMenuDeptByUserId) : JsonData.buildError("服务器出错了");
        }
        //如果存在key就在redis中取
        List<Object> cacheList = redisCatch.getCacheList(deptIden);
        return cacheList != null ? JsonData.buildSuccess(cacheList) : JsonData.buildError("服务器出错了");
    }
    /**
     * @Author 祖铭泽
     * @Date 2022/1/7/0007
     * @description 获取对应的部门标识
     */
    @Override
    public List<String> getJsMenuDeptIdenByUserId(Integer userId) {
        return jsMenuDeptMapper.getJsMenuDeptIdenByUserId(userId);
    }

    private List<JsMenu> setMenus(Integer userId){
        List<JsMenu> oneLevelNavs = jsMenuDeptMapper.getJsMenuDeptByUserId(userId,0);
        for (JsMenu oneLevelNav : oneLevelNavs) {
            oneLevelNav.setChildren(jsMenuDeptMapper.getJsMenuDeptByUserId(userId,oneLevelNav.getMenuId()));
            List<JsMenu> twoLevelNavs = oneLevelNav.getChildren();
            for (JsMenu twoLevelNav : twoLevelNavs) {
                twoLevelNav.setChildren(jsMenuDeptMapper.getJsMenuDeptByUserId(userId,twoLevelNav.getMenuId()));
            }
        }
        return oneLevelNavs;
    }
}
